package fr.uhp.mpr.data;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;

import fr.uhp.mpr.data.DataMeter.iname;


/**
 * Cette classe extrait les donnees du fichier mpr_projet_data.txt
 * pour permettre d'y acceder via des getters.
 */
public class DataExplore {

	private static ArrayList<ArrayList<Double>> liste = new ArrayList<ArrayList<Double>>();
	private static DataExplore instance = null;
	
	private DataExplore() {
		importData("mpr_projet_data.txt");
	}
	
	private static void importData(String file) {
		
		try{
			BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
			String ligne;
			int count = 0;
			for(int i = 0; i < 8; i++) {
				liste.add(new ArrayList<Double>());
			}
			while ((ligne = br.readLine())!= null){
				if(count > 4){
					String[] tab = ligne.split("\t");
					
					for(int i = 1; i < tab.length; i++)
						if(i < 6) {
							liste.get(i-1).add(Double.valueOf(tab[i]).doubleValue());
							liste.set(i-1, liste.get(i-1));
						}
						else if (i > 6)
							liste.get(i-2).add(Double.valueOf(tab[i]).doubleValue());
				}
				count++;
			}
			br.close();
		} catch(Exception e){ 
			System.out.println(e + "importData error"); }
	}
	
	public static DataExplore getInstance() {
		if (instance == null)
			instance = new DataExplore();

		return instance;
	}
	
	public static ArrayList<Double> getData(iname inter) {
		switch (inter) {
			case TEMPERATURE : return liste.get(0);
			case HUMIDITY	 : return liste.get(1);
			case PRESSURE	 : return liste.get(2);
			case RAIN		 : return liste.get(3);
			case WIND		 : return liste.get(4);
			case DEWPOINT	 : return liste.get(5);
			case WINDTEMP	 : return liste.get(6);
			case SQUALL 	 : return liste.get(7);
		}
		return null;
	}
	
	public static ArrayList<Double> getData(int index) {
		return liste.get(index);
	}
	
	public static ArrayList<ArrayList<Double>> getListe() {
		return liste;
	}

	@Override
	public String toString() {
		StringBuffer sb = new StringBuffer();
		
		for (int j = 0; j < liste.get(0).size(); j++) {
			for (int i = 0; i < liste.size(); i++)
				sb.append(liste.get(i).get(j) + "\t");
			sb.append("\n");
		}
		return sb.toString();
	}
}
